package com.wiselink.coupang.productcatalog.request;

import com.alibaba.fastjson2.JSONObject;
import lombok.Getter;
import lombok.Setter;

import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.math.BigDecimal;
import java.util.List;

@Getter
@Setter
public class PlatformProductItemRequestParam {
    /**
     * 卖家商品属性名 输入各属性名，并保证每个商品不重复
     */
    @NotNull
    @Size(max = 150, message = "最大长度：150个字符")
    private String itemName;
    /**
     * 折扣率基准价（定价）
     */
    @NotNull
    @Min(value = 0, message = "最小值：0")
    private BigDecimal originalPrice;
    /**
     * 售价
     */
    @NotNull
    @Min(value = 0, message = "最小值：0")
    private BigDecimal salePrice;
    /**
     * 可售数量 输入可销售的库存数量。“最初”注册商品时，只能在申请商品审批前输入可销售数量。审批通过后，可通过[修改各属性数量]API修改最大数量：99999
     */
    @NotNull
    @Min(value = 0, message = "最小值：0")
    @Max(value = 99999, message = "最大值：99999")
    private Long maximumBuyCount;
    /**
     * 人均最多可购买数量 每人最多可购买的数量。 如果没有限制，请输入“0” （例如：如果输入的人均最多可购买数量为 100，最长购买期限为 3。那么这意味着，一个人在3天内最多可购买 100 件）
     */
    @NotNull
    @Min(value = 0, message = "最小值：0")
    private Long maximumBuyForPerson;
    /**
     * 最长购买期限 设置某个时间段内每人可以购买的最大数量 。 如果没有限制，请输入“1”（例如：如果输入的人均最多可购买数量为 100，最长购买期限为 3。那么这意味着，一个人在3天内最多可购买 100 件）
     */
    @NotNull
    @Min(value = 1, message = "最小值：1")
    private Long maximumBuyForPersonPeriod;
    /**
     * 标准发货日（天）
     */
    @NotNull
    @Min(value = 1, message = "最小值：1")
    private Long outboundShippingTimeDay;
    /**
     * 单位数量
     */
    @NotNull
    @Min(value = 0, message = "最小值：0")
    private Long unitCount;
    /**
     * 19岁及以上  ADULT_ONLY 19岁及以上可购买；EVERYONE 无购买年龄限制(默认值)
     */
    @NotNull
    private String adultOnly;
    /**
     * 是否需纳税 TAX	 需纳税(默认值)； FREE	无需缴税
     */
    @NotNull
    private String taxType;
    /**
     * 是否为平行进口 PARALLEL_IMPORTED 平行进口; NOT_PARALLEL_IMPORTED 平行进口(默认值)
     */
    @NotNull
    private String parallelImported;
    /**
     * 是否为海外代购 OVERSEAS_PURCHASED 代购; NOT_OVERSEAS_PURCHASED 非代购(默认值)<p>※ 创建代购商品时，应注
     */
    @NotNull
    private String overseasPurchased;
    /**
     * 是否需要PCC(个人通关代码)
     * <p>海外代购商品需要PCC。 </p>
     * <p>如果是海外代购（AGENT_BUY），产品PCC必须填写为true。</p>
     * <p>- 默认值: 不需要 (false)</p>
     */
    @NotNull
    private Boolean pccNeeded;
    /**
     * 卖家商品编号 (企业商品编号) 可任意设置卖家固有的商品编号值，输入值包含在订单查询API response中。
     */
    private String externalVendorSku;
    /**
     * 条形码 贴在商品上的有效标准商品编号
     */
    private String barcode;
    /**
     * 无条形码 若无条形码，则为True
     */
    private Boolean emptyBarcode;
    /**
     * 没有条形码的原因
     */
    @Size(max = 100, message = "最大长度：100个字符 ")
    private String emptyBarcodeReason;
    /**
     * 型号
     */
    private String modelNo;
    /**
     * 卖家商品属性的附加信息   JSON串 Key : 以值的形态存在。可根据需要多次重复输入。
     */
    private JSONObject extraProperties;
    /**
     * 商品认证信息
     */
    private List<PlatformProductCertificationRequestParam> certifications;
    /**
     * 搜索词 可根据需要重复输入。["搜索词1"，"搜索词2"]  最多可输入20个搜索词，每个搜索词不得超过20个字符，不得输入 !@#$%^&*-+;:'. 外的其它特殊字符
     */
    @Size(max = 20, message = "最多可输入20个搜索词，每个搜索词不得超过20个字符")
    private List<String> searchTags;
    /**
     * 图片列表
     */
    @NotNull
    private List<PlatformProductImgRequestParam> images;
    /**
     * 商品通知信息列表 可通过“品类元数据查询API”或整体品类列表的Excel文件，查看并选择所需的通知信息项
     */
    private List<PlatformProductNoticeRequestParam> notices;
    /**
     * 属性列表(属性)
     * <p>输入按品类确定的属性列表 </p>
     * <p>可重复输入想要注册的购买属性数量 </p>
     * <p>若购买属性（attribute exposed）的所有值都重复，则无法注册。</p>
     * <p>必须注册1个以上，可将不想输入的属性从attributes 列表中删除或将attributeValueName输入为""后发送。</p>
     */
    @NotNull
    private List<PlatformProductAttributeRequestParam> attributes;
    /**
     * 内容列表
     */
    @NotNull
    private List<PlatformProductContentRequestParam> contents;
    /**
     * 商品状态 商品创建后，无法修改offerCondition。未选择时，则将其视为NEW。<p>NEW	新商品<p>REFURBISHED	翻新<p>USED_BEST	二手 (优秀)<p>USED_GOOD	二手 (良好)<p>USED_NORMAL	二手 （一般）
     */
    private String offerCondition;
    /**
     * 曾用商品的详细说明<p>对曾用商品状态的说明，700个字符以内<p>仅在offerCondition输入为“曾用”时可用
     */
    @Size(max = 700, message = "最多可输入700个字符")
    private String offerDescription;
}
